/**
 * 姓名测算服务
 * 实现姓名测算的核心算法
 */

const { logInfo, logError, logWarning } = require('../logger');

// 积极特质库
const POSITIVE_TRAITS = {
  // 常见字的积极特质
  '安': ['平和从容', '给人安全感', '内心稳定'],
  '博': ['知识渊博', '胸怀宽广', '乐于分享'],
  '晨': ['充满希望', '新的开始', '活力四射'],
  '悦': ['快乐感染', '心态积极', '享受生活'],
  '欣': ['喜悦开朗', '乐观向上', '温暖他人'],
  '宇': ['胸怀广阔', '包容世界', '气度不凡'],
  '慧': ['智慧灵动', '善于思考', '发现美好'],
  '智': ['聪明睿智', '思维敏捷', '学识丰富'],
  '明': ['光明磊落', '洞察力强', '前途光明'],
  '静': ['内心宁静', '深思熟虑', '沉着冷静'],
  '雅': ['优雅气质', '品味高雅', '艺术天赋'],
  '文': ['文采飞扬', '学识渊博', '表达能力强'],
  '华': ['才华横溢', '光彩夺目', '成就非凡'],
  '丽': ['美丽动人', '魅力四射', '审美能力强'],
  '强': ['坚强不屈', '毅力过人', '执行力强'],
  '勇': ['勇敢无畏', '敢于挑战', '行动力强'],
  '诚': ['诚实守信', '真诚待人', '值得信赖'],
  '信': ['自信坚定', '信念明确', '感染力强'],
  '德': ['品德高尚', '仁慈善良', '受人尊敬'],
  '康': ['身体健康', '心态平和', '生活稳定'],
  '宁': ['内心宁静', '处事稳重', '情绪稳定'],
  '瑞': ['吉祥如意', '福气满满', '好运连连'],
  '祥': ['吉祥如意', '和谐美满', '幸福安康'],
  '福': ['福气满满', '幸福安康', '好运连连'],
  '乐': ['快乐开朗', '乐观积极', '感染力强'],
  '欢': ['欢乐愉悦', '热情洋溢', '传播快乐'],
  '喜': ['喜气洋洋', '心情愉悦', '好运连连'],
  '佳': ['美好优秀', '品质上乘', '令人满意'],
  '美': ['美丽动人', '完美无瑕', '令人欣赏'],
  '丽': ['美丽动人', '魅力四射', '光彩照人'],
  '秀': ['秀外慧中', '才貌双全', '出类拔萃'],
  '英': ['英雄气概', '才华出众', '领导能力'],
  '杰': ['杰出非凡', '才华横溢', '成就卓越'],
  '超': ['超越平凡', '能力出众', '追求卓越'],
  '卓': ['卓越非凡', '出类拔萃', '成就杰出'],
  '辉': ['光辉灿烂', '成就辉煌', '光芒四射'],
  '煌': ['辉煌灿烂', '成就显赫', '声名远扬'],
  '耀': ['耀眼夺目', '才华横溢', '引人注目'],
  '光': ['光明磊落', '前途光明', '积极向上'],
  '明': ['聪明睿智', '洞察力强', '前途光明'],
  '亮': ['明亮照人', '积极向上', '充满活力'],
  '清': ['清新脱俗', '纯洁无瑕', '心境清明'],
  '洁': ['纯洁无瑕', '品格高尚', '一尘不染'],
  '纯': ['纯真善良', '心地纯洁', '品质高尚'],
  '真': ['真诚待人', '真实可靠', '追求真理'],
  '善': ['善良仁慈', '乐于助人', '品德高尚'],
  '仁': ['仁慈善良', '宽容大度', '品德高尚'],
  '义': ['正义凛然', '讲义气', '品格高尚'],
  '礼': ['礼貌待人', '举止得体', '修养良好'],
  '智': ['聪明睿智', '学识渊博', '思维敏捷'],
  '信': ['诚实守信', '言出必行', '值得信赖'],
  '忠': ['忠诚可靠', '尽职尽责', '值得信赖'],
  '孝': ['孝顺父母', '尊敬长辈', '品德高尚'],
  '悌': ['友爱兄弟', '关爱家人', '家庭和睦'],
  '和': ['和谐相处', '平和包容', '善于协调'],
  '平': ['平和稳重', '公平公正', '心态平和'],
  '顺': ['顺利通畅', '顺应自然', '心态平和'],
  '达': ['通达事理', '见识广博', '处事圆融'],
  '通': ['通晓事理', '思维敏捷', '沟通能力强'],
  '敏': ['思维敏捷', '反应迅速', '学习能力强'],
  '捷': ['敏捷迅速', '行动力强', '效率高'],
  '敏': ['聪敏好学', '反应灵敏', '适应力强'],
  '慧': ['智慧过人', '洞察力强', '善于思考'],
  '颖': ['聪颖过人', '才华横溢', '创新能力强'],
  '灵': ['灵动活泼', '思维敏捷', '富有创意'],
  '巧': ['心灵手巧', '技艺精湛', '创造力强'],
  '妙': ['妙趣横生', '创意无限', '艺术天赋'],
  '奇': ['奇思妙想', '创新独特', '与众不同'],
  '特': ['独特个性', '与众不同', '特色鲜明'],
  '新': ['创新求变', '勇于尝试', '开拓精神'],
  '创': ['创新创造', '开拓进取', '勇于突破'],
  '新': ['革新求变', '与时俱进', '开拓精神'],
  '革': ['革新变革', '勇于改变', '适应力强'],
  '变': ['适应变化', '灵活应变', '与时俱进'],
  '进': ['积极进取', '不断进步', '追求卓越'],
  '取': ['进取心强', '目标明确', '行动力强'],
  '胜': ['胜券在握', '自信满满', '能力强'],
  '利': ['顺利成功', '利益共享', '合作共赢'],
  '益': ['有益他人', '利人利己', '共同成长'],
  '助': ['乐于助人', '帮助他人', '奉献精神'],
  '帮': ['乐于帮助', '团队合作', '协作精神'],
  '扶': ['扶持他人', '助人为乐', '奉献精神'],
  '持': ['坚持不懈', '持之以恒', '毅力过人'],
  '坚': ['坚强不屈', '意志坚定', '毅力过人'],
  '韧': ['坚韧不拔', '抗压能力强', '适应力强'],
  '耐': ['耐心细致', '坚持不懈', '毅力过人'],
  '恒': ['持之以恒', '坚持不懈', '毅力过人'],
  '久': ['持久稳定', '长久发展', '持续成长'],
  '长': ['长远眼光', '持续发展', '成长潜力'],
  '远': ['志向远大', '眼光长远', '前程似锦'],
  '高': ['志向高远', '追求卓越', '成就非凡'],
  '大': ['胸怀宽广', '志向远大', '气度不凡'],
  '宏': ['宏伟目标', '气度不凡', '志向远大'],
  '伟': ['伟大理想', '成就非凡', '影响深远'],
  '壮': ['雄心壮志', '气概非凡', '目标远大'],
  '豪': ['豪情壮志', '气度不凡', '慷慨大方'],
  '豪': ['豪迈大气', '胸怀宽广', '气度不凡'],
  '爽': ['爽朗直率', '性格开朗', '真诚待人'],
  '朗': ['开朗乐观', '性格阳光', '积极向上'],
  '朗': ['明朗清晰', '思维敏捷', '表达能力强'],
  '昌': ['繁荣昌盛', '兴旺发达', '前景光明'],
  '盛': ['繁荣兴盛', '成就辉煌', '声名远扬'],
  '兴': ['兴旺发达', '蒸蒸日上', '前景光明'],
  '旺': ['事业兴旺', '运势旺盛', '财运亨通'],
  '发': ['发达兴旺', '蒸蒸日上', '成就显著'],
  '达': ['发达成功', '通达事理', '成就非凡'],
  '成': ['成就非凡', '成功在望', '目标达成'],
  '功': ['功成名就', '成就显著', '声名远扬'],
  '就': ['成就卓越', '功成名就', '事业有成'],
  '业': ['事业有成', '专业精湛', '成就显著'],
  '绩': ['成绩显著', '表现优异', '成就突出'],
  '效': ['效率很高', '效果显著', '执行力强'],
  '能': ['能力出众', '技能精湛', '才华横溢'],
  '才': ['才华横溢', '能力出众', '技艺精湛'],
  '艺': ['艺术天赋', '技艺精湛', '创意无限'],
  '技': ['技艺精湛', '技能出众', '专业过硬'],
  '专': ['专业精湛', '专注认真', '技能过硬'],
  '精': ['精益求精', '技艺精湛', '追求卓越'],
  '湛': ['精湛技艺', '专业过硬', '技能出众'],
  '深': ['深谋远虑', '学识渊博', '思维深刻'],
  '厚': ['厚德载物', '品格高尚', '胸怀宽广'],
  '宽': ['心胸宽广', '包容大度', '善于协调'],
  '广': ['见识广博', '胸怀宽广', '视野开阔'],
  '阔': ['视野开阔', '胸怀宽广', '气度不凡'],
  '富': ['财富丰盈', '生活富足', '资源丰富'],
  '裕': ['生活富裕', '资源丰富', '条件优越'],
  '足': ['资源充足', '条件优越', '发展潜力'],
  '丰': ['丰富多样', '资源充足', '收获满满'],
  '盈': ['充盈饱满', '收获丰富', '成果丰硕'],
  '满': ['圆满完整', '满足充实', '幸福安康'],
  '圆': ['圆满成功', '和谐完整', '完美无缺'],
  '完': ['完美无缺', '完整无损', '品质上乘'],
  '整': ['完整统一', '条理清晰', '系统性强'],
  '齐': ['齐全完备', '准备充分', '条件优越'],
  '备': ['准备充分', '条件完备', '资源丰富'],
  '充': ['充实丰富', '内容饱满', '价值很高'],
  '实': ['实在可靠', '诚实守信', '脚踏实地'],
  '真': ['真实可靠', '真诚待人', '追求真理'],
  '诚': ['诚实守信', '真诚待人', '值得信赖'],
  '信': ['诚实守信', '言出必行', '值得信赖'],
  '忠': ['忠诚可靠', '尽职尽责', '值得信赖'],
  '贞': ['坚贞不屈', '忠诚可靠', '品格高尚'],
  '洁': ['纯洁无瑕', '品格高尚', '一尘不染'],
  '廉': ['廉洁自律', '品格高尚', '正直无私'],
  '正': ['正直无私', '公正公平', '品格高尚'],
  '直': ['正直坦率', '真诚待人', '坦荡无私'],
  '公': ['公正公平', '大公无私', '品格高尚'],
  '平': ['公平公正', '平等待人', '心态平和'],
  '均': ['均衡发展', '公平合理', '协调一致'],
  '协': ['协调合作', '团队精神', '协作能力强'],
  '同': ['同心协力', '团结合作', '目标一致'],
  '共': ['共同奋斗', '合作共赢', '集体意识'],
  '合': ['合作协调', '团结一致', '配合默契'],
  '作': ['合作协调', '团队精神', '协作能力强'],
  '团': ['团结一致', '集体意识', '凝聚力强'],
  '结': ['团结凝聚', '关系紧密', '凝聚力强'],
  '群': ['群体意识', '团队精神', '集体荣誉'],
  '众': ['众志成城', '团结合作', '力量强大'],
  '汇': ['汇聚力量', '集思广益', '资源整合'],
  '聚': ['聚集能量', '资源整合', '力量强大'],
  '集': ['集思广益', '资源整合', '集体智慧'],
  '累': ['积累丰富', '经验丰富', '基础扎实'],
  '积': ['积累深厚', '经验丰富', '基础牢固'],
  '储': ['储备充足', '资源丰富', '发展潜力'],
  '储': ['储蓄积累', '资源充足', '条件优越'],
  '备': ['准备充分', '条件完备', '资源丰富'],
  '足': ['充足完备', '条件优越', '发展潜力'],
  '裕': ['充裕丰富', '资源充足', '条件优越'],
  '余': ['富余充足', '资源丰富', '条件优越'],
  '舒': ['舒适安逸', '心情舒畅', '生活愉快'],
  '适': ['适应力强', '灵活应变', '与时俱进'],
  '宜': ['适宜恰当', '恰到好处', '和谐统一'],
  '当': ['恰当合适', '恰到好处', '处理得当'],
  '时': ['与时俱进', '把握时机', '顺应潮流'],
  '机': ['把握机会', '灵活应变', '行动力强'],
  '会': ['善于交际', '沟通能力强', '人际关系好'],
  '交': ['善于交往', '沟通能力强', '人际关系好'],
  '往': ['善于交往', '沟通能力强', '人际关系好'],
  '来': ['善于交际', '沟通能力强', '人际关系好'],
  '友': ['友善待人', '朋友众多', '人际关系好'],
  '善': ['善良仁慈', '乐于助人', '品德高尚'],
  '良': ['品质优良', '心地善良', '值得信赖'],
  '贤': ['贤良淑德', '品德高尚', '才德兼备'],
  '淑': ['温柔贤淑', '品格高尚', '气质优雅'],
  '婉': ['温婉可人', '气质优雅', '性格温和'],
  '娴': ['娴静优雅', '气质出众', '修养良好'],
  '娴': ['娴熟精通', '技艺精湛', '能力出众'],
  '熟': ['熟练精通', '技艺精湛', '经验丰富'],
  '练': ['训练有素', '技艺精湛', '经验丰富'],
  '熟': ['熟练掌握', '技能过硬', '经验丰富'],
  '巧': ['巧妙灵活', '技艺精湛', '创造力强'],
  '妙': ['妙趣横生', '创意无限', '艺术天赋'],
  '佳': ['美好优秀', '品质上乘', '令人满意'],
  '优': ['优秀出众', '品质上乘', '表现卓越'],
  '秀': ['秀外慧中', '才貌双全', '出类拔萃'],
  '杰': ['杰出非凡', '才华横溢', '成就卓越'],
  '俊': ['俊秀出众', '才貌双全', '气质非凡'],
  '俏': ['俏丽动人', '魅力四射', '气质出众'],
  '俏': ['俏皮可爱', '性格开朗', '活泼动人'],
  '俐': ['聪明伶俐', '反应敏捷', '思维活跃'],
  '俐': ['伶俐乖巧', '聪明机智', '反应敏捷'],
  '俐': ['伶俐活泼', '性格开朗', '聪明机智'],
  '俐': ['伶俐能干', '能力出众', '技艺精湛'],
  '俐': ['伶俐可爱', '性格讨喜', '聪明机智'],
  '俐': ['伶俐聪慧', '思维敏捷', '学习能力强']
};

// 成长建议矩阵
const GROWTH_SUGGESTIONS = {
  '沟通型': [
    '参加演讲俱乐部',
    '学习倾听技巧', 
    '记录交流心得'
  ],
  '创造型': [
    '建立灵感笔记本',
    '尝试不同艺术形式',
    '参观创意展览'
  ],
  '领导型': [
    '参与团队项目',
    '学习管理技巧',
    '培养决策能力'
  ],
  '服务型': [
    '参与志愿活动',
    '培养同理心',
    '学习助人技巧'
  ],
  '智慧型': [
    '阅读各类书籍',
    '学习新技能',
    '参与讨论交流'
  ],
  '艺术型': [
    '练习艺术创作',
    '欣赏艺术作品',
    '参加艺术活动'
  ],
  '运动型': [
    '坚持体育锻炼',
    '学习运动技能',
    '参与团队运动'
  ],
  '学术型': [
    '深入专业学习',
    '参与学术讨论',
    '撰写研究文章'
  ]
};

// 姓名正能量标签库
const POSITIVE_TAGS = [
  '温暖小太阳', '创意无限', '沟通达人',
  '快乐传播者', '梦想实践家', '希望播种机',
  '智慧之星', '勇气先锋', '善良使者',
  '幽默大师', '坚韧斗士', '灵感源泉',
  '魅力四射', '才华横溢', '潜力无限',
  '积极向上', '乐观开朗', '正能量满满'
];

/**
 * 姓名测算服务
 */
// 引入axios库用于HTTP请求
const axios = require('axios');

const NameAnalysisService = {
  /**
   * 分析姓名的积极特质
   * @param {string} name - 姓名
   * @param {string} analysisType - 分析类型
   * @returns {Object} 分析结果
   */
  analyzeName: async (name, analysisType = 'comprehensive') => {
    try {
      // 参数验证
      if (!name || typeof name !== 'string') {
        throw new Error('姓名必须是非空字符串');
      }
      
      // 清理姓名（去除空格）
      const cleanName = name.trim();
      
      if (cleanName.length === 0) {
        throw new Error('姓名不能为空');
      }
      
      // 记录日志
      logInfo('开始分析姓名', { name: cleanName, analysisType });
      
      // 根据分析类型生成不同的分析结果
      let analysis;
      switch (analysisType) {
        case 'traits':
          analysis = NameAnalysisService.analyzeTraits(cleanName);
          break;
        case 'growth':
          analysis = NameAnalysisService.analyzeGrowth(cleanName);
          break;
        case 'interpretation':
          analysis = NameAnalysisService.analyzeInterpretation(cleanName);
          break;
        default:
          analysis = NameAnalysisService.analyzeComprehensive(cleanName);
      }
      
      // 记录日志
      logInfo('姓名分析完成', { name: cleanName });
      
      return analysis;
    } catch (error) {
      logError('姓名分析失败', { error: error.message, name });
      throw error;
    }
  },
  
  /**
   * 分析姓名中的积极特质
   * @param {string} name - 姓名
   * @returns {Object} 特质分析结果
   */
  analyzeTraits: (name) => {
    const traits = new Set();
    
    // 遍历姓名中的每个字
    for (const char of name) {
      // 查找该字的积极特质
      if (POSITIVE_TRAITS[char]) {
        // 添加所有特质
        POSITIVE_TRAITS[char].forEach(trait => traits.add(trait));
      }
    }
    
    // 如果没有找到匹配的特质，添加默认特质
    if (traits.size === 0) {
      traits.add('独特个性');
      traits.add('无限潜力');
      traits.add('积极向上');
    }
    
    return {
      positiveTraits: Array.from(traits),
      name: name
    };
  },
  
  /**
   * 生成成长建议
   * @param {string} name - 姓名
   * @returns {Object} 成长建议结果
   */
  analyzeGrowth: (name) => {
    // 获取积极特质
    const traitsAnalysis = NameAnalysisService.analyzeTraits(name);
    const traits = traitsAnalysis.positiveTraits;
    
    // 根据特质匹配成长建议
    const suggestions = new Set();
    
    // 遍历所有特质，匹配成长建议
    traits.forEach(trait => {
      // 简单的关键词匹配
      if (trait.includes('沟通') || trait.includes('表达')) {
        GROWTH_SUGGESTIONS['沟通型'].forEach(s => suggestions.add(s));
      } else if (trait.includes('创造') || trait.includes('创意')) {
        GROWTH_SUGGESTIONS['创造型'].forEach(s => suggestions.add(s));
      } else if (trait.includes('领导') || trait.includes('组织')) {
        GROWTH_SUGGESTIONS['领导型'].forEach(s => suggestions.add(s));
      } else if (trait.includes('服务') || trait.includes('帮助')) {
        GROWTH_SUGGESTIONS['服务型'].forEach(s => suggestions.add(s));
      } else if (trait.includes('智慧') || trait.includes('学识')) {
        GROWTH_SUGGESTIONS['智慧型'].forEach(s => suggestions.add(s));
      } else if (trait.includes('艺术') || trait.includes('审美')) {
        GROWTH_SUGGESTIONS['艺术型'].forEach(s => suggestions.add(s));
      }
    });
    
    // 如果没有匹配到特定建议，添加通用建议
    if (suggestions.size === 0) {
      suggestions.add('保持好奇心，持续学习');
      suggestions.add('培养一项新技能或爱好');
      suggestions.add('与积极向上的人交往');
    }
    
    return {
      growthSuggestions: Array.from(suggestions),
      name: name
    };
  },
  
  /**
   * 生成姓名解读
   * @param {string} name - 姓名
   * @returns {Object} 姓名解读结果
   */
  analyzeInterpretation: (name) => {
    // 获取积极特质
    const traitsAnalysis = NameAnalysisService.analyzeTraits(name);
    const traits = traitsAnalysis.positiveTraits;
    
    // 生成解读文本
    let interpretation = `你的名字"${name}"蕴含着独特的能量和美好的寓意。`;
    
    // 根据特质数量添加不同的解读
    if (traits.length > 0) {
      interpretation += `从字义来看，这个名字体现了${traits.slice(0, 3).join('、')}等积极特质。`;
    }
    
    // 添加鼓励性语句
    interpretation += "每个字都像种子一样，孕育着无限的可能性。相信自己，你的名字就是你独特价值的体现。";
    
    return {
      interpretation: interpretation,
      name: name
    };
  },
  
  /**
   * 综合分析姓名
   * @param {string} name - 姓名
   * @returns {Object} 综合分析结果
   */
  analyzeComprehensive: async (name) => {
    // 获取各个方面的分析结果
    const traitsAnalysis = NameAnalysisService.analyzeTraits(name);
    const growthAnalysis = NameAnalysisService.analyzeGrowth(name);
    const interpretationAnalysis = NameAnalysisService.analyzeInterpretation(name);
    
    // 生成正能量标签
    const tags = NameAnalysisService.generatePositiveTags(name);
    
    // 调用AI分析服务
    let aiAnalysis = {};
    try {
      aiAnalysis = await NameAnalysisService.aiNameAnalysis(name);
    } catch (error) {
      logWarning('AI分析失败，使用默认分析', { error: error.message, name });
      // 如果AI分析失败，使用默认分析
      aiAnalysis = {
        personalityTraits: ['智慧', '创造力', '领导力'],
        careerProspects: '在创意、科技或领导岗位上有很好的发展潜力',
        relationshipAdvice: '善于沟通，能建立深厚的人际关系',
        healthRecommendations: '注意劳逸结合，保持身心健康'
      };
    }
    
    // 生成综合报告
    const comprehensiveAnalysis = {
      name: name,
      positiveTraits: traitsAnalysis.positiveTraits,
      growthSuggestions: growthAnalysis.growthSuggestions,
      interpretation: interpretationAnalysis.interpretation,
      positiveTags: tags,
      aiAnalysis: aiAnalysis,
      createdAt: new Date().toISOString()
    };
    
    return comprehensiveAnalysis;
  },
  
  /**
   * AI姓名分析服务
   * @param {string} name - 姓名
   * @returns {Object} AI分析结果
   */
  aiNameAnalysis: async (name) => {
    try {
      // 检查是否配置了AI服务
      if (!process.env.OPENAI_API_KEY) {
        throw new Error('AI服务未配置');
      }
      
      // 调用OpenAI API进行姓名分析
      const response = await axios.post('https://api.openai.com/v1/completions', {
        model: "text-davinci-003",
        prompt: `请用中文分析姓名"${name}"的个性特征、职业前景、人际关系和健康建议，每个方面提供2-3个要点。`,
        max_tokens: 300,
        temperature: 0.7
      }, {
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`
        }
      });
      
      // 解析AI返回的结果
      const aiResult = response.data.choices[0].text.trim();
      
      // 简单解析AI结果（实际应用中可能需要更复杂的解析逻辑）
      return {
        fullAnalysis: aiResult,
        personalityTraits: '请参考AI分析结果',
        careerProspects: '请参考AI分析结果',
        relationshipAdvice: '请参考AI分析结果',
        healthRecommendations: '请参考AI分析结果'
      };
    } catch (error) {
      logError('AI姓名分析失败', { error: error.message, name });
      throw new Error('AI分析服务暂时不可用，请稍后重试');
    }
  },
  
  /**
   * 生成正能量标签
   * @param {string} name - 姓名
   * @returns {Array} 正能量标签数组
   */
  generatePositiveTags: (name) => {
    // 根据姓名长度和特质生成标签数量
    const tagCount = Math.min(3 + (name.length % 3), 5);
    
    // 随机选择标签
    const tags = [];
    const usedIndices = new Set();
    
    while (tags.length < tagCount && tags.length < POSITIVE_TAGS.length) {
      const randomIndex = Math.floor(Math.random() * POSITIVE_TAGS.length);
      
      // 确保不重复选择
      if (!usedIndices.has(randomIndex)) {
        tags.push(POSITIVE_TAGS[randomIndex]);
        usedIndices.add(randomIndex);
      }
    }
    
    return tags;
  }
};

module.exports = NameAnalysisService;